/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tesis.service.impl;

import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tesis.dto.in.*;
import tesis.dto.out.FormDTO;
import tesis.service.CargoService;
import tesis.service.CrudService;
import tesis.util.MotorInvoker;
import tesis.utils.PropertyUtils;

/**
 *
 * @author hectdx
 */
@Transactional
@Service("service")
public class ServiceImpl implements CargoService{
    private final static Logger LOG=LoggerFactory.getLogger(ServiceImpl.class);
    
    private  final static String  url=PropertyUtils.getAppProperty("url.motor");
    
    @Inject
    private CrudService crud;
    
    
    
    
    public  ExecuteStationDTO procesarDatos(FormDTO datosFormulario,InstanciaEstacionDTO instancia){
           
        ExecuteStationDTO execute = new ExecuteStationDTO();   
        execute.setInstanciaDTO(instancia);
        execute.setInstanciaProcesoDTO(instancia.getInstanciaProceso());
        
        LOG.info("Procesando datos ...");
        
        /****se podrian encapsular esto en otro metodo del motor: executeStation procesarDatos(formDTO,instanciancia)****/
        EstacionDTO est = MotorInvoker.getStationByName(instancia.getInstanciaProceso().getIdproceso(),url, instancia.getNombreEstacion());
        List<VariableDTO> lstVar = MotorInvoker.getVars(url, est.getIdEstacion()).getListVariableDTO();
        
        for (VariableDTO v:lstVar){
            v.setValorVariable(datosFormulario.getValor(v.getNombre()));
        }
        
        List<TipoDocumentoDTO> tipoDocs = MotorInvoker.getTipoDocumento(url, est.getIdEstacion()).getListTipoDocumentoDTO();
        List<DocumentoDTO> lstFiles=new ArrayList<DocumentoDTO>();
        DocumentoDTO documentoDTO=null;
        
        for (TipoDocumentoDTO d:tipoDocs){
            EstadoDocumentoDTO e=new EstadoDocumentoDTO();
            String estadoDoc=datosFormulario.getValor(d.getNombre());//solo tiene valor cuando es entrada
            if (estadoDoc!=null){
                e.setIdestadodocumento(new Integer(estadoDoc));
                d.setEstadoDocumento(e);
                documentoDTO=new DocumentoDTO();
                documentoDTO.setFile(datosFormulario.getFile(d.getNombre()));
                documentoDTO.setNombre(datosFormulario.getValor(d.getNombre()));
                documentoDTO.setIdtipodocumentoDTO(d);
                documentoDTO.setRutadocumento(documentoDTO.getFile().getPath());
                lstFiles.add(documentoDTO);
            }
            
            
        }

        execute.setLstVarDTO(lstVar);
        execute.setLstDocumentoDTO(lstFiles);

        return MotorInvoker.ejecutarEstacion(url, execute);
        /***hasta aqui**/   
    }
    
    
    
    
}
